package com.itheima.tlias.utils;

import com.alibaba.fastjson2.JSONObject;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.util.Date;

/**
 * jwt token 生成与验证（解析）
 */
public class JwtUtil {
    private static final String SIG = "22c1cc41-1e5a-436d-833f-2dad3a8eae27";

    private JwtUtil() {
    }

    /**
     * 生成token
     *
     * @param username payload 用户名
     * @param password payload 密码
     * @param minutes  token 过期时间，以分钟为单位
     * @return
     */
    public static String generateToken(String username, String password, long minutes) {
        //1.构建jwt对象
        //2.指定header （一般省略）
        //3.放置payload，以及过期时间和生效时间
        //4.进行数字签名
        //5。生成token
        Date date = new Date();
        String token = Jwts.builder()
                .claim("username", username)
                .claim("password", password)
                .issuedAt(date)
                .expiration(new Date(date.getTime() + 60 * 1000 * minutes))
                .signWith(Keys.hmacShaKeyFor(SIG.getBytes()), Jwts.SIG.HS256)
                .compact();
        return token;
    }

    public static JSONObject verifyToken(String token){
        //1.构建解析对象
        //2.指定签名
        //3.指定被签名后的token
        JwtParser parser = Jwts
                .parser()
                .verifyWith(Keys.hmacShaKeyFor(SIG.getBytes()))
                .build();
        Claims payload = parser.parseSignedClaims(token).getPayload();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username",payload.get("username"));
        jsonObject.put("password",payload.get("password"));
//还没有完成token失效的处理以及 token字符串不合法的处理
        return jsonObject;
    }

}
